#include "../exercise.h"

// READ: `static` 关键字 <https://zh.cppreference.com/w/cpp/language/storage_duration>
// THINK: 这个函数的两个 `static` 各自的作用是什么？
/*
两个 static 的作用：

函数前的 static：表示这个函数具有内部链接，只能在当前编译单元（当前文件）中使用，不能被其他文件访问。

函数内的 static：表示这个局部变量具有静态存储期，它的生命周期贯穿整个程序运行期间，但作用域仍然仅限于这个函数内部。

关键问题： 静态局部变量 static_ 只在第一次调用函数时初始化，后续调用会保持之前的值。
*/
static int func(int param) {
    static int static_ = param;
    // std::cout << "static_ = " << static_ << std::endl;
    return static_++;
}

int main(int argc, char **argv) {
    // TODO: 将下列 `?` 替换为正确的数字
    ASSERT(func(5) == 5, "static variable value incorrect");
    ASSERT(func(4) == 6, "static variable value incorrect");
    ASSERT(func(3) == 7, "static variable value incorrect");
    ASSERT(func(2) == 8, "static variable value incorrect");
    ASSERT(func(1) == 9, "static variable value incorrect");
    return 0;
}
